

// class myTest{
//     constructor() {
//     this.modules  = new Map();
//      this.initmodules();
//     //  console.log('=== modules 数据内容 ===');
//     //  console.log('modules 大小:', this.modules.size);
//     //  this.modules.forEach((value, key) => {
//     //      console.log(`\n--- ${key} ---`);
//     //      console.log('匹配规则:', value.match);
//     //      console.log('模块类:', value.module);
//     //      console.log('配置:', value.config);
//     //  });
//     //  console.log('=== modules 数据结束 ===');
   
// }

// initmodules() {
//     // 多站点匹配配置
//     this.modules.set('国家智慧教育平台',  {
//         match: [
//             /^(https?:\/\/)?(basic\.smartedu\.cn)/,
//             /^(https?:\/\/)?(core\.teacher\.vocational\.smartedu\.cn)/,
//             /^(https?:\/\/)?(test3\.ykt\.eduyun\.cn)/,
//             /localhost:\d+(\/.*)?$/ // 本地开发环境
//         ],
//         //module: SmartEdumodule,
//         config: {
//             refreshInterval: 5000,
//             apiEndpoints: {
//             }}});
//     this.modules.set('师学通平台',  {
//         match: url => {
//             const targetPaths = [
//                 '/studyPlan/',
//                 '/course/'
//             ];
//             // 正确的主机名验证
//             const validHost = 'pn202413060.stu.teacher.com.cn';
//             const isHostMatch = url.hostname  === validHost;

//             // 路径双重验证
//             const isPathMatch = targetPaths.some(path  =>
//                 url.pathname.startsWith(path)
//             );

//             return isHostMatch && isPathMatch;
//         },
//         //module: Teachermodule,
//         config: { debugMode: false }
//     });
//     this.modules.set('中国教育电视台',  {
//         match: [
//             /^(https?:\/\/)?(cas\.study\.yanxiu\.jsyxsq\.com\/auth\/selfHost\/studyPlace\/index.html)/,
//             /localhost:\d+(\/.*)?$/
//         ],
//         //module: HebeiCas,
//         config: {
//             refreshInterval: 5000,
//             apiEndpoints: {
//             }}});
//     this.modules.set('奥鹏',  {
//         match: [
//             /^(https?:\/\/)?(learn\.ourteacher\.com\.cn\/StepLearn\/StepLearn)/,
//             /localhost:\d+(\/.*)?$/
//         ],
//         //module: HebeiAoPeng,
//         config: {
//             refreshInterval: 5000,
//             apiEndpoints: {
//             }}});
//     this.modules.set('高等教育出版社-2024中小学',  {
//         match: [
//             /^(https?:\/\/)?(vc\.chinabett\.com\/studyduration\/index)/,
//             /localhost:\d+(\/.*)?$/
//         ],
//         //module: Chinabett,
//         config: {
//             refreshInterval: 5000,
//             apiEndpoints: {
//             }}});
//     this.modules.set('中小学网络D校-湖南全国中小学幼儿园',  {
//         match: [
//             /^(https?:\/\/)?(www\.ttcdw\.cn\/p)/,

//             /localhost:\d+(\/.*)?$/
//         ],
//         //module: Dangxiaottcdw,
//         config: {
//             refreshInterval: 5000,
//             apiEndpoints: {
//             }}});
//     this.modules.set('国家开放大学-大同市中小学幼儿园教师全员培训',  {
//         match: [
//             /^(https?:\/\/)?([a-z0-9-]+\.)?besteacher\.com\.cn\/activity\/curriculum\/.*/,

//             /^(https?:\/\/)?([a-z0-9-]+\.)?webtrn\.cn\/learnspace\/learn\/learn\/templateeight\/index\.action.*/,
//             /localhost:\d+(\/.*)?$/
//         ],
//         //module: BestTeacher,
//         config: {
//             refreshInterval: 5000,
//             apiEndpoints: {
//             }}});
//     this.modules.set('重庆专技人员继续教育公需科目培训',  {
//         match: [
//             /^(https?:\/\/)?cqrl.21tb.com\/els\/html\/courseStudyItem\/courseStudyItem.learn.do/,
//             /localhost:\d+(\/.*)?$/
//         ],
//         //module: Cqrl,
//         config: {
//             refreshInterval: 5000,
//             apiEndpoints: {
//             }}});
//     this.modules.set('赤峰市 专业技术人员继续教育 公需科目培训网',  {
//         match: [
//             /^(https?:\/\/)?([a-z0-9-]+\.)?nmgdbrc\.com\//,
//             /localhost:\d+(\/.*)?$/
//         ],
//         //module: Nmgdbrc,
//         config: {
//             refreshInterval: 5000,
//             apiEndpoints: {
//             }}});
//     this.modules.set('人教版义教新教材',  {
//         match: [
//             /^(https?:\/\/)?wp\.pep\.com\.cn\/web\/index\.php\?\/px\//,
//             /^(https?:\/\/)?bjpep\.gensee\.com\/webcast\/site\/vod\//,
//             /localhost:\d+(\/.*)?$/
//         ],
//         //module: Pep,
//         config: {
//             refreshInterval: 5000,
//             apiEndpoints: {
//             }}});
//     this.modules.set('广东双融双创',  {
//         match: [
//             /^(https?:\/\/)?srsc\.gdedu\.gov\.cn\/course\/study/,
//             /localhost:\d+(\/.*)?$/
//         ],
//         //module: Gdedu,
//         config: {
//             refreshInterval: 5000,
//             apiEndpoints: {
//             }}});
//     this.modules.set('chinahrt(宁夏、赤峰、包头专技)',  {
//         match: [
//             /^(https?:\/\/)?gp\.chinahrt\.com\/index\.html/,
//             /^(https?:\/\/)?videoadmin\.chinahrt\.com\/videoPlay\/playEncrypt/,
//             /localhost:\d+(\/.*)?$/
//         ],
//         //module: Chinahrt,
//         config: {
//             refreshInterval: 5000,
//             apiEndpoints: {
//             }}});
//     this.modules.set('云继教_yunteacher',  {
//         match: [
//             /^(https?:\/\/)?saas\.yunteacher\.com\/module\//,
//             /^(https?:\/\/)?saas\.yunteacher\.com\/coursePlay/,
//             /localhost:\d+(\/.*)?$/
//         ],
//         //module: Yunteacher,
//         config: {
//             refreshInterval: 5000,
//             apiEndpoints: {
//             }}});
//     this.modules.set('吉林_白云公需专业_中盛佳源',  {
//         match: [
//             /^(https?:\/\/)?jlzj\.ylxue\.net\/LearningCenter\/LearningCourseVideo/,
//             /localhost:\d+(\/.*)?$/
//         ],
//         //module: Ylxue,
//         config: {
//             refreshInterval: 5000,
//             apiEndpoints: {
//             }}});
//     this.modules.set('Chinamde_赤峰',  {
//         match: [
//             /^(https?:\/\/)([a-z0-9-]+\.)?chinamde.cn\/play/,
//             /^(https?:\/\/)p\.bokecc\.com\/playhtml\.bo/,
//             /localhost:\d+(\/.*)?$/
//         ],
//         //module: Chinamde,
//         config: {
//             refreshInterval: 5000,
//             apiEndpoints: {
//             }}});
//     this.modules.set('广东教师教育_公需课',  {
//         match: [
//             /^(https?:\/\/)jsxx\.gdedu\.gov\.cn\/([a-z0-9_-]+)?\/study\/course\//,
//             /localhost:\d+(\/.*)?$/
//         ],
//         //module: Gdedujsxx,
//         config: {
//             refreshInterval: 5000,
//             apiEndpoints: {
//             }}});
//     this.modules.set('中山教师研修',  {
//         match: [
//             /^(https?:\/\/)m.zsjsjy.com\/teacher\/train\/train\/online\/study\.do/,
//             /localhost:\d+(\/.*)?$/
//         ],
//         //module: Zsjsjy,
//         config: {
//             refreshInterval: 5000,
//             apiEndpoints: {
//             }}});
//     this.modules.set('四川省继续教育',  {
//         match: [
//             /^(https?:\/\/)trplayer\.sctce\.cn\//,
//             /localhost:\d+(\/.*)?$/
//         ],
//         //module: Sedu,
//         config: {
//             runAt:'document-start',
//             refreshInterval: 5000,
//             apiEndpoints: {
//             }}});
//     this.modules.set('希沃学苑',  {
//         match: [
//             /^(https?:\/\/)study\.seewoedu\.cn\/tCourse\/group\//,
//             /^(https?:\/\/)cpb-m\.cvte\.com\//,
//             /localhost:\d+(\/.*)?$/
//         ],
//         //module: Seewo,
//         config: {
//             refreshInterval: 5000,
//             apiEndpoints: {
//             }}});
//     this.modules.set('名师课堂',  {
//         match: [
//             /^(https?:\/\/)saas\.mingshiclass\.com\//,
//             /localhost:\d+(\/.*)?$/
//         ],
//         //module: Mingshiclass,
//         config: {
//             refreshInterval: 5000,
//             apiEndpoints: {
//             }}});

// }}
// var ass=new myTest();
//      ass.modules.forEach((value, key) => {
//          console.log(`\n--- ${key} ---`);
//          console.log('匹配规则:', value.match);
         
//          console.log('配置:', value.config);
//      });

// aaa=JSON.parse("{\"source_token_account_type\":\"person\",\"tenant_id\":0,\"server_time\":\"2025-07-31T15:25:28.631+0800\",\"account_type\":\"org\",\"mac_key\":\"5GvXhTEHpV\",\"mac_algorithm\":\"hmac-sha-256\",\"access_token\":\"7F938B205F876FC39BD5FD64A3C8216784D1769F2CEB23D998E9A1728605AF820AD684E6488B99BAA35B092B0488EE711FF14B5CB9410379\",\"refresh_token\":\"7F938B205F876FC39BD5FD64A3C8216784D1769F2CEB23D9F2133CE91A72A48553B4E810B64EA857214B2527A0EEC0D64430531F51C508C8F586FD2F97C02F360B7D4314173551B0D97B633BE2D5EA698DF9C51ECE79402F8F58A4DBD1773BB301EFF3F0B588E29B33A9CE03BC75D6899A931E71B71C2F8DCAB59FC9B7B6E9286EDAC56102AB7F8D2BC194A300CCBCD3EFF03EEF72408768C6E8A81AC71D908F7FB68E2002491D9D\",\"account_id\":\"0\",\"expires_at\":\"2025-08-01T09:09:29.536+0800\",\"user_id\":\"452595126899\",\"first_create_time\":1753405769536,\"auth_verify_types\":[\"PASSWORD\"],\"region\":\"wx\",\"diff\":-204}")
// // 假设你有一个 JSON 字符串

 
// // 使用 for...in 循环遍历对象
// for (let key in aaa) {
//     console.log(key + ": " + aaa[key]);
//   }
function getDynamicToken() {
  // 函数返回值，对localStorage操作
 //{
  //     key: "ND_UC_AUTH-12345678-1234-5678-9abc-def012345678&ncet-xedu&token",
  //     appId: "12345678-1234-5678-9abc-def012345678",
  //     token: {
  //         user_id: "user123",
  //         session_id: "session456"
  //     }
  // }
  try {
      const pattern = /^ND_UC_AUTH-([0-9a-fA-F]{8}-([0-9a-fA-F]{4}-){3}[0-9a-fA-F]{12})&ncet-xedu&token$/;
      for (let key of Object.keys(localStorage)) {
          if (pattern.test(key)) {
              return {
                  key: key,
                  appId: key.match(pattern)[1],
                  token: JSON.parse(JSON.parse(localStorage.getItem(key)).value)
              };
          }
      }
      throw Error("Invalid token! can not get loginInfo!");
  } catch (err) {
      throw Error("At:getDynamicToken>>" + err);
  }
}
//(requestObj.resourceLearningPositions.url + resId + '/' + getDynamicToken().token["user_id"], getVideoTime())
//https://x-study-record-api.ykt.eduyun.cn/v1/resource_learning_positions/4cee06e2-0389-401f-912f-dd59df0ee738/452595126899
// function getVideoTime() {
//   return Math.round(document.querySelector('video').duration)
// }
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//  else if (Array.isArray(resId) && resId.length > 0) {
//               const results = await Promise.allSettled(resId.map(async (item) => {
//                   try {
//                       // https://x-study-record-api.ykt.eduyun.cn/v1/resource_learning_positions/342ed663-890e-4972-84cf-bdd37ce414fc/452595126899,
//                       //item.studyTime为fulls.json对应的值
//     await setProgress(requestObj.resourceLearningPositions.url + item.resource_id + '/' + getDynamicToken().token["user_id"], item.studyTime)
//                       //item.name为fulls.json对应的值： "name": "01 申继亮：关于义务教育新课程实施的几点说明与建议",
//                                               return {name: item.name, status: 'success'};
//                   } catch (e) {
//                       console.error(`${item.name} 失败！`, e);
//                       return {name: item.name, status: 'fail', error: e};
//                   }
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
const getMACAuthorizationHeaders = function (url, method) {
  let n = getDynamicToken().token
  return He(url, method, {
      //see 1.txt
      accessToken: n.access_token, macKey: n.mac_key, diff: n.diff
  });
}
function Ze(e) {
  for (var t = "0123456789ABCDEFGHIJKLMNOPQRTUVWXZYS".split(""), n = "", r = 0; r < e; r++) n += t[Math.ceil(35 * Math.random())];
  return n
}
function Fe(e) {
  return (new Date).getTime() + parseInt(e, 10) + ":" + Ze(8)
}
function ze(e, t, n, r) {
  let o = {
      relative: new URL(e).pathname, authority: new URL(e).hostname
  }
  let i = t + "\n" + n.toUpperCase() + "\n" + o.relative + "\n" + o.authority + "\n";
  return CryptoJS.HmacSHA256(i, r).toString(CryptoJS.enc.Base64)
}
function He(e) {
  // 作者：zzzzzzys
  // https://greasyfork.org/zh-CN/users/1176747-zzzzzzys
  // 搬运可耻
  let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : "GET",
      n = arguments.length > 2 ? arguments[2] : void 0, r = n.accessToken, o = n.macKey, i = n.diff,
      s = Fe(i), a = ze(e, s, t, o);
  return 'MAC id="'.concat(r, '",nonce="').concat(s, '",mac="').concat(a, '"')
}